/**
 * 验证工具函数
 */

/**
 * 检查字符串是否有有效值（不为 null、undefined、空字符串或只包含空格）
 * @param value 要检查的值
 * @returns 如果有有效值返回 true，否则返回 false
 */
export function hasValidValue(value: string | null | undefined): boolean {
  return value != null && value.trim() !== '';
}

/**
 * 检查字符串是否为空值（null、undefined、空字符串或只包含空格）
 * @param value 要检查的值
 * @returns 如果为空值返回 true，否则返回 false
 */
export function isEmpty(value: string | null | undefined): boolean {
  return !hasValidValue(value);
}

/**
 * 获取字符串的安全值，如果为空则返回默认值
 * @param value 要检查的值
 * @param defaultValue 默认值，默认为空字符串
 * @returns 安全的字符串值
 */
export function getSafeValue(value: string | null | undefined, defaultValue: string = ''): string {
  return hasValidValue(value) ? value!.trim() : defaultValue;
}

/**
 * 检查对象的指定属性是否有有效值
 * @param obj 要检查的对象
 * @param property 属性名
 * @returns 如果属性有有效值返回 true，否则返回 false
 */
export function hasValidProperty<T>(obj: T, property: keyof T): boolean {
  const value = obj[property];
  if (typeof value === 'string') {
    return hasValidValue(value);
  }
  return value != null;
}

/**
 * 验证必填字段
 * @param obj 要验证的对象
 * @param requiredFields 必填字段列表
 * @returns 验证结果，包含是否通过和错误信息
 */
export function validateRequiredFields<T>(
  obj: T, 
  requiredFields: (keyof T)[]
): { valid: boolean; errors: string[] } {
  const errors: string[] = [];
  
  for (const field of requiredFields) {
    if (!hasValidProperty(obj, field)) {
      errors.push(`${String(field)} 是必填字段`);
    }
  }
  
  return {
    valid: errors.length === 0,
    errors
  };
}
